home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / include / pickP.h < prev    next >
C/C++ Source or Header  |  1992-12-04  |  3KB  |  95 lines

  1. /* Copyright (c) 1992 The Geometry Center; University of Minnesota
  2.    1300 South Second Street;  Minneapolis, MN  55454, USA;
  3.    
  4. This file is part of geomview/OOGL. geomview/OOGL is free software;
  5. you can redistribute it and/or modify it only under the terms given in
  6. the file COPYING, which you should have received along with this file.
  7. This and other related software may be obtained via anonymous ftp from
  8. geom.umn.edu; email: software@geom.umn.edu. */
  9.  
  10. /* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips,
  11.  * Celeste Fowler */
  12.  
  13. #ifndef PICKPDEF
  14. #define    PICKPDEF
  15.  
  16. /*
  17.  * Private definitions for picking.
  18.  */
  19.  
  20. #include "pick.h"
  21. #include "ooglutil.h"
  22.  
  23. struct Pick {
  24.     Point3 got;
  25.  
  26.     float thresh;
  27.  
  28.     int want;        /* Fields wanted */
  29.     int  found;        /* Fields found */
  30.  
  31.     vvec gcur;              /* Path to the current primitive - 
  32.                    used for recursion */
  33.     vvec gpath;        /* Path to picked primitive */
  34.     Geom *gprim;        /* Picked primitive */
  35.  
  36.     HPoint3 v;        /* picked vertex, if any */
  37.     int vi;            /* index of picked vertex */
  38.  
  39.     HPoint3 e[2];        /* endpoints of picked edge, if any */
  40.     int ei[2];        /* indices of endpoints of picked edge */
  41.  
  42.     Transform Tprim;
  43.     Transform Tmirp;
  44.     Transform Tw;
  45.     Transform Tself;
  46.  
  47.     HPoint3 *f;        /* array of vertices of picked face, if any */
  48.     int fn;            /* number of vertices in array f */
  49.     int fi;            /* index of picked face */
  50. };
  51.  
  52. /* 
  53.  * PickFace() is used to test a face for a pick and modify the pick 
  54.  * structure if necessary. 
  55.  *   n_verts is the number of vertices in the face.
  56.  *   verts is the list of vertices in the face.
  57.  *   pick is the pick structure.
  58.  *   ap is the appearance (not currently used).
  59.  * The following fields of the pick structure will be filled in:
  60.  *   found - what has been found.
  61.  *   vi - index of the picked vertex in the verts array.
  62.  *   ei - indices of the endpoints of the picked edge in the verts array.
  63.  *   f - freed if non-NULL and set to NULL
  64.  * PickFace() returns nonzero if something was picked.  The calling 
  65.  * program is responsable for using the data returned in the pick 
  66.  * structure to fill in the actual points and correct the indices.
  67.  */
  68. int PickFace(int n_verts, Point3 *verts, Pick *pick, Appearance *ap);
  69.  
  70. /*
  71.  * PickFillIn() is used to fill in the fields of a pick structure once
  72.  * a pick has been found.  
  73.  *   pick is the pick structure.
  74.  *   n_verts is the number of points in the face.
  75.  *   got is the interesection of the pick ray with the face.
  76.  *   vertex is the index of the picked vertex (-1 if none).
  77.  *   edge is the index of the first vertex of the hit line (-1 if none).
  78.  *   ep is the picked point on the edge.
  79.  * The routine fills in the following fields of the pick structure:
  80.  *   got - filled in with the parameter got. 
  81.  *   found - filled in with what was found.
  82.  *   vi - the index of the picked vertex. 
  83.  *   ei - the indices of the endpoints of the picked edge. 
  84.  *   f - freed if non-null and set to null.
  85.  *   fn - the number of vertices in the face
  86.  *   gpath - the path to the picked primitive (copy of gcur)
  87.  * The rest of the fields are left unchanged.
  88.  * Returns pick->found.
  89.  */
  90. int PickFillIn(Pick *pick, int n_verts, Point3 *got, int vertex, 
  91.            int edge, Appearance *ap);
  92.  
  93.  
  94. #endif /*PICKPDEF*/
  95.